package org.csy.work.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.*;

/**
 * @author CSY
 * @date 2024-11-26
 */
public class DbUtil {
    /**
     * 连接URL
     */
    private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=shop_demo;Encrypt=false";
    /**
     * 驱动程序
     */
    private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    /**
     * 帐号
     */
    private static final String USER = "sa";
    /**
     * 密码
     */
    private static final String PASS = "sa";


    static {
        try {
            // 在类加载时，加载 JDBC 驱动程序
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 获取连接对象
     *
     * @return 连接对象
     */
    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(URL, USER, PASS);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 关闭相关的对象 - 释放资源
     *
     * @param rst  结果集对象 - 用于存储查询的数据
     * @param stmt 语句对象 - 用于执行 SQL 语句 - Statement、PreparedStatement、CallableStatement
     * @param conn 连接对象 - 建立 Java 语言与数据库的桥梁
     */
    public static void close(ResultSet rst, Statement stmt, Connection conn) {
        // 保证代码的健壮性
        if (rst != null) {
            try {
                rst.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if(stmt!=null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

    /**
     * 将密码进行MD5加密
     * @param pwd
     * @return
     */
    public static String MD5(String pwd) {
        try {
            //创建 MD5 加密实例
            MessageDigest md = MessageDigest.getInstance("MD5");
            //执行加密操作
            byte[] digest = md.digest(pwd.getBytes());
            //将得到的散列值转换为 16 进制
            StringBuffer sb = new StringBuffer();
            for(byte b : digest) {
                sb.append(String.format("%02x", b));
            }
            //返回 MD5 散列值
            return sb.toString().toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5加密算法不可用",e);
        }
    }
}
